title: 数值的扩展
date: 2018.9.6
tags:
2018.9.6 星期四 12:21
1. 二进制和八进制表
2. Number.isFinite(), Number.isNaN()
3. Number.parseInt(), Number.parseFloat()
4. Number.isInteger()
5. Number.EPSILON
6. 安全整数和 Number.isSafeInteger()
7. Math 对象的扩展
8. 指数运算符
二进制和八进制数值的新的写法,分别用前缀0b(或0B)和0o(或0O)表示。
如果要将0b和0o前缀的字符串数值转为十进制,要使用Number方法。
注意,如果参数类型不是数值,Number.isFinite一律返回false。
如果参数类型不是NaN,Number.isNaN一律返回false。
它们与传统的全局方法isFinite()和isNaN()的区别在于,传统方法先调用Number()将非数值的值转为数值,再进行判断,
而这两个新方法只对数值有效,Number.isFinite()对于非数值一律返回false, Number.isNaN()只有对于NaN才返回true,非NaN一律返回false。
JavaScript 内部,整数和浮点数采用的是同样的储存方法,所以 25 和 25.0 被视为同一个值。
如果参数不是数值,Number.isInteger返回false。
注意,由于 JavaScript 采用 IEEE 754 标准,数值存储为64位双精度格式,数值精度最多可以达到 53 个二进制位(1 个隐藏位与 52 个有效位)。如果数值的精度超过这个限度,第54位及后面的位就会被丢弃,这种情况下,Number.isInteger可能会误判。
类似的情况还有,如果一个数值的绝对值小于Number.MIN_VALUE(5E-324)
总之,如果对数据精度的要求较高,不建议使用Number.isInteger()判断一个数值是否为整数。
ES6 在Number对象上面,新增一个极小的常量Number.EPSILON。根据规格,它表示 1 与大于 1 的最小浮点数之间的差。
ES6 在 Math 对象上新增了 17 个与数学相关的方法。所有这些方法都是静态方法,只能在 Math 对象上调用。
Math.trunc(),Math.sign(), Math.cbrt(),Math.clz32()
Math.fround(),Math.hypot()
### 对数方法 4个
Math.expm1(),Math.log1p(),Math.log10(),Math.log2()
### 双曲函数方法 6个
这个运算符的一个特点是右结合,而不是常见的左结合。多个指数运算符连用时,是从最右边开始计算的。
指数运算符可以与等号结合,形成一个新的赋值运算符(**=)。
注意,V8 引擎的指数运算符与Math.pow的实现不相同,对于特别大的运算结果,两者会有细微的差异。
Math.pow(99, 99)
// 3.697296376497263e+197
99 ** 99
// 3.697296376497268e+197
12:32